<?php

/**
 * 简单工厂（静态工厂方法）模式
 * 
 * 类型：创建型模式
 * 
 * 角色：
 *  1，工厂类。
 *  2，抽象产品类。
 *  3，具体产品类。
 *  
 * 优点：
 * 
 * 缺点：
 *  1，每增加一种具体产品类，就需要修改工厂类，违反开闭原则。
 */

/**
 * 抽象产品类
 */
abstract class Product
{
	
}

/**
 * 具体产品A
 */
class ConcreteProductA extends Product
{
	function __construct()
	{
		echo 'ConcreateProductA 被创建。<br/>';
	}
}

/**
 * 具体产品B
 */
class ConcreteProductB extends Product
{
	function __construct()
	{
		echo 'ConcreateProductB 被创建。<br/>';
	}
}

/**
 * 工厂类
 */
class Factory
{
	public static function createProduct($type)
	{
		switch ($type) {
			case 'A':
				return new ConcreteProductA();
			case 'B':
				return new ConcreteProductB();
			default:
				return null;
		}
	}
}

class Client
{
	public static function main()
	{
		$product = Factory::createProduct('A');
		
		$product = Factory::createProduct('B');
	}
}

Client::main();